/**
 * axios 请求封装
 */

import axios from "axios";
import {ElMessage} from "element-plus";
import {TOKEN} from '@/common/constants'
import {REQUESTURL} from "@/common/constants";

// 创建 axios 实例
const service = axios.create({
  baseURL: REQUESTURL,
  timeout: 5000,
})

// 请求拦截
service.interceptors.request.use((config) => {
  // 设置 headers 如果没有就设置空对象
  config.headers = config.headers || {}
  // 添加 token
  // 如果有 token 值则将 token 添加到 headers 中
  if (localStorage.getItem(TOKEN)) {
    config.headers.token = localStorage.getItem(TOKEN) || ""
  }
  return config;
})

// 响应拦截
service.interceptors.response.use((result) => {
  // 获取请求中的响应值
  const code = result.data.code;

  // 错误码 300 表示在后端的 token 没有查询到
  // 或者以过期
  if (code === 301) {
    // 移除本地 token 从新进行登陆获取新的 token
    localStorage.removeItem(TOKEN);
  }

  // 如果请求中响应的值是 200 则表示请求的参数是成功的
  // 可以将结果放回
  if (code === 200) {
    return result.data;
  } else {  // 否则返回错误的信息
    // 使用了 element plus 组件中的消息提示
    ElMessage.error(result.data.message)
    return null;
  }
},(error) => {  // 如果请求出现了错误，则响应出去
  ElMessage.error('Response Error')
  console.log(error)
})

export default service;
